8223. Префиксы подстроки

 

Префиксом строки S назовем любую подстроку вида S[1..k], k ≤ size(S) (size(S) – длина строки). Префикс может быть как пустым, так и совпадать с самой строкой. Если префикс не является пустым и не совпадает со строкой S, то его называют собственным префиксом строки S. Напишите программу, которая выводит количество префиксов и все собственные префиксы подстроки S[i..j] в порядке возрастания их длины.

 

Вход. Первая строка содержит S, длина которого не превышает 100. Во второй строке записаны два индекса i и j (1 ≤ i ≤ size(S), 1 ≤ j ≤ size(S)).

 

Выход. В первой строке вывести количество префиксов подстроки S[i..j]. В следующих строках вывести все собственные префиксы данной подстроки. Формат выходных данных приведен в примере.

 

Пример входа

Пример выхода

abracadabra

2 5

5

b

br

bra

 

 

РЕШЕНИЕ

строки

 

Анализ алгоритма

Количество префиксов равно ji + 2. Вычтем из i и j единицу, чтобы индексация велась с нуля.

Выводим все собственные префиксы s[i..k] подстроки s[i..j] (i k < j).

 

Реализация алгоритма

Объявим символьные массивы.

 

char s[110], temp[110];

 

Читаем входные данные.

 

gets(s);

scanf("%d %d", &i, &j);

i--; j--;

 

Выводим количество префиксов.

 

printf("%d\n", j - i + 2);

 

Выводим все собственные префиксы s[i..k] подстроки s[i..j]. Для этого должно быть i k < j.

 

for (k = i; k < j; k++)

{

 

Копируем s[i..k] в массив temp. В конце строки temp ставим ноль байт.

 

  strncpy(temp, s + i, k - i + 1);

  temp[k - i + 2] = 0;

 

Выводим префикс.

 

  puts(temp);

}

 

Java реализация

 

import java.util.*;

 

public class Main

{

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    String s = con.nextLine();

    int i = con.nextInt();

    int j = con.nextInt();

 

    System.out.println(j - i + 2);

    for(int k = i; k < j; k++)

    {

      String s1 = s.substring(i-1,k);

      System.out.println(s1);

    }

    con.close();

  }

}

 

Python реализация

 

s = input()

i, j = map(int,input().split())

print (j - i + 2)

for k in range(i, j):

   print (s[i-1:k])